package com.cskaoyan.extend.initailize.implicit;

/*
         隐式初始化
            a. 当父类提供了默认的构造方法
            b. 且子类的构造方法中没有显式调用父类的其它构造方法
        则在执行子类的构造方法之前会自动执行父类的构造方法

        注意:
          a. 子类对象的隐式初始化，只针对父类的无参构造方法
 */
public class Demo1 {

    public static void main(String[] args) {

        // 创建子类对象
        int sonI = 10;
        ImplicitSon implicitSon = new ImplicitSon(sonI);
        // 访问子类对象中子类自己定义的成员变量值
        System.out.println(implicitSon.sonI);
        // 访问子类对象中继承父类的成员变量值
        System.out.println(implicitSon.fatherI);

    }
}

class ImplicitFather {

    int fatherI;
//    无参构造方法
    public ImplicitFather() {
        fatherI = 100;
        System.out.println("implicit father");
    }

    public ImplicitFather(int fatherI) {
        this.fatherI = fatherI;
    }


}

class ImplicitSon extends ImplicitFather {
    int sonI;

    public ImplicitSon(int sonI) {
        // 无法保证先父后子，初始化顺序(如果父类没有定义无参构造方法)
        System.out.println("implicit son");
        this.sonI = sonI;
    }
}